package com.hippo.javacore.javaiostream.iostream;

import java.io.FileReader;
import java.io.Reader;

/**
 * @ClassName FileReaderOpt
 * @Description TODO 文件字符输入流操作
 * @Author tangxl
 * @create 2023-04-06 18:11
 **/
public class FileReaderOpt {
    public static void main(String[] args) {
        // TODO 文件字符输入流操作
        // 1.文件字符输入流：读取单个字符
        // 2.文件字符输入流：读取字符数组
        // 3.文件字符输入流：读取字符数组的一部分

        // 1.文件字符输入流：读取单个字符
        // 1.1 创建FileReader对象，构造方法中绑定要读取的数据源
        // 1.2 使用FileReader对象中的方法read读取文件
        // 1.3 自动释放资源
        try(
                Reader fr = new FileReader("study-commons/java-file-iostream/src/main/resources/file/a.txt")
                ){
            int len = 0; // 每次读取的有效字符个数
            while ((len = fr.read()) != -1) { // 每次读取一个字符,返回读取的字符,当读取到文件末尾时，返回-1
                System.out.print((char)len);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }

        // 2.文件字符输入流：读取字符数组
        // 2.1 创建FileReader对象，构造方法中绑定要读取的数据源
        // 2.2 使用FileReader对象中的方法read读取多个字符到字符数组中
        // 2.3 自动释放资源
        try(
                Reader fr = new FileReader("study-commons/java-file-iostream/src/main/resources/file/a.txt")
                ){
            char[] buffer = new char[1024]; // 存储读取到的多个字符
            int len = 0; // 每次读取的有效字符个数
            while ((len = fr.read(buffer)) != -1) { // 每次读取多个字符,返回读取的字符个数,当读取到文件末尾时，返回-1
                System.out.print(new String(buffer, 0, len));
            }
        }catch (Exception e) {
            e.printStackTrace();
        }


    }
}
